#include "../include/Jeu.h"
#include "../include/Keyboard_Manager.h"

Jeu::Jeu()
{
    App = new sf::RenderWindow(sf::VideoMode(SCREEN_H, SCREEN_L), "SFML_RPG");
    Katana katanaJoueur{50,50,50,100,"katanaDefaut"}; // Attaque, Defense, Vitesse,Usure, Nom
    heros = new Heros(heros_img, sf::Color(16,37,62), sf::Vector2f(200,200), 150,STYLE1, katanaJoueur);
    m_Keyboard = new Keyboard_Manager(this);
    m_Gui = new Gui();
    m_Gui->SetScene(JEU);

}

Jeu::~Jeu()
{
    delete App;
    delete heros;
}

void Jeu::Init()
{
    //Initialiser les ennemis
    //Lire la sauvegarde, lire la map ou se trouve le joueur et l'état actuel du scénario
}

sf::RenderWindow* Jeu::GetApp()
{
    return App;
}


void Jeu::Update(float ElapsedTime)
{
     switch (m_Gui->GetScene())
    {
        case JEU :
        UpdateJeu(ElapsedTime);
        break;

        case ECRAN_TITRE :
        UpdateTitre();
        break;
    }
}


void Jeu::UpdateJeu(float ElapsedTime)
{

     if (heros->IsWalking()) // Si le héros a fini de marcher ,
    heros->Stand();         // donc aucune touche de direction appuyée, on le met a l'arret

    if(m_Keyboard->Check_Input(sf::Key::E) && heros->GetAnimation().IsStoped())
    heros->Attaquer(); // Si appui sur E et le héros est arréter, on lance l'attaque

    if (m_Keyboard->Check_Input(sf::Key::Up))
    heros->Walk(HAUT);

    if (m_Keyboard->Check_Input(sf::Key::Right))
    heros->Walk(DROITE);

    if (m_Keyboard->Check_Input(sf::Key::Down))
    heros->Walk(BAS);

    if (m_Keyboard->Check_Input(sf::Key::Left))
    heros->Walk(GAUCHE);

    if (heros->AnimEnded()) //Si l'animation de taper est terminée, on arréte de taper
    heros->StopAttaque();

    if (heros->IsHitting() > 0) //Si le héros tape on update l'épée
    heros->UpdateEpee(ElapsedTime);


    heros->Update(ElapsedTime);

}

void Jeu::UpdateTitre()
{
//C'est ici que tu met le code qui gère la souris, faire que si elle est a telle endroit
//sa active le bool correspondant etc
m_Gui->GetTitre().Update();

// charger
if(m_Gui->GetTitre().GetCharger().GetSubRect().Contains(m_Keyboard->MouseX(), m_Keyboard->MouseY()))
{// si la souris touche le sprite alors
    m_Gui->GetTitre().IsCharger = true;

   if(m_Keyboard->MouseClick() == sf::Mouse::Left)
   { // le Joueur clock sur gauche

     // m_Gui->SetScene(JEU);
   }
}
else // alors la souris ne touche pas donc :
{
    m_Gui->GetTitre().IsCharger = false;
}

// new
if(m_Gui->GetTitre().GetNew().GetSubRect().Contains(m_Keyboard->MouseX(), m_Keyboard->MouseY()))
{// si la souris touche le sprite alors
    m_Gui->GetTitre().IsNew = true;

   if(m_Keyboard->MouseClick() == sf::Mouse::Left)
   { // le Joueur clock sur gauche

     // new game (+) '=' ='= =================
   }
}
else // alors la souris ne touche pas donc :
{
    m_Gui->GetTitre().IsNew = false;
}

if(m_Gui->GetTitre().GetQuit().GetSubRect().Contains(m_Keyboard->MouseX(), m_Keyboard->MouseY()))
{// si la souris touche le sprite alors
    m_Gui->GetTitre().IsQuit = true;

   if(m_Keyboard->MouseClick() == sf::Mouse::Left)
   { // le Joueur clock sur gauche

    App->Close();


   }
}
else // alors la souris ne touche pas donc :
{
    m_Gui->GetTitre().IsQuit = false;
}

}
void Jeu::Draw()
{
    App->Clear(sf::Color::White);

    switch (m_Gui->GetScene())
    {

    case JEU :
    if (heros->IsHitting() > 0) // si le héros est en train de taper on dessine l'épée avec lui
    App->Draw(heros->GetAnimationEpee());

    App->Draw(heros->GetAnimation());
    break;

    case ECRAN_TITRE:
    App->Draw(m_Gui->GetTitre().GetBackground());
    App->Draw(m_Gui->GetTitre().GetCharger());
    App->Draw(m_Gui->GetTitre().GetNew());
    App->Draw(m_Gui->GetTitre().GetQuit());
    break;



    }
    // UpdadeDialogue(1);
    App->Display();
}

void Jeu::UpdadeDialogue(int numero)
{




    App->Draw(m_Gui->GetDialogue().Getecrant_dialogue());
   App->Draw(m_Gui->GetDialogue().Texte_a_afficher[0]);




}
